package cqrtplm.dto;

import lombok.Data;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Data
public class CategoryAttributeCardDTO {
    private String categoryInName;

    private String categoryDisName;

    private String categoryType;

    private String isHiddenModelNumber;

    private String categoryCode;

    private List<AttributeCardDTO> attributeList = new ArrayList<>();

    public static Map<String, CategoryAttributeCardDTO> convert(List<ImportCategoryAttributeCardDTO> list) {
        Map<String, CategoryAttributeCardDTO> map = new HashMap<>();
        Map<String, List<ImportCategoryAttributeCardDTO>> cardMap = new HashMap<>();
        for (ImportCategoryAttributeCardDTO dto : list) {
            if (cardMap.containsKey(dto.getCategoryInName())) {
                List<ImportCategoryAttributeCardDTO> categoryAttributeCardDTOS = cardMap.get(
                        dto.getCategoryInName());
                categoryAttributeCardDTOS.add(dto);
            } else {
                List<ImportCategoryAttributeCardDTO> categoryAttributeCardDTOS = new ArrayList<>();
                categoryAttributeCardDTOS.add(dto);
                cardMap.put(dto.getCategoryInName(), categoryAttributeCardDTOS);
            }
        }
        for (Map.Entry<String, List<ImportCategoryAttributeCardDTO>> entry : cardMap.entrySet()) {
            List<ImportCategoryAttributeCardDTO> value = entry.getValue();
            CategoryAttributeCardDTO category = new CategoryAttributeCardDTO();
            category.setCategoryInName(value.get(0).getCategoryInName());
            category.setCategoryDisName(value.get(0).getCategoryDisName());
            category.setCategoryType(value.get(0).getCategoryType());
            category.setIsHiddenModelNumber(value.get(0).getIsHiddenModelNumber());
            category.setCategoryCode(value.get(0).getCategoryInName().contains("_") ? value.get(0).getCategoryInName().split("_")[1] : value.get(0).getCategoryInName());
            Map<String, AttributeCardDTO> attributeMap = new HashMap<>();
            for (ImportCategoryAttributeCardDTO dto : value) {
                AttributeCardDTO attribute;
                if (attributeMap.containsKey(dto.getAttributeInName())) {
                    attribute = attributeMap.get(dto.getAttributeInName());
                } else {
                    attribute = new AttributeCardDTO();
                    attribute.setAttributeInName(dto.getAttributeInName());
                    attribute.setAttributeDisName(dto.getAttributeDisName());
                    if ("1".equals(dto.getDefaultValue())) {
                        attribute.setDefaultValue(dto.getEnumValue());
                    }
                    attribute.setIsSplice(dto.getIsSplice());
                    attribute.setAttributeNo(dto.getAttributeNo());
                    if (attribute.getEnumMap() == null) {
                        attribute.setEnumMap(new HashMap<>());
                    }
                    attributeMap.put(dto.getAttributeInName(), attribute);
                }
                attribute.getEnumMap().put(dto.getEnumId(), dto.getEnumValue());
            }
            category.setAttributeList(new ArrayList<>(attributeMap.values()));
            map.put(entry.getKey(), category);
        }
//            CategoryAttributeCardDTO category = map.getOrDefault(dto.getCategoryInName(), new CategoryAttributeCardDTO());
//            category.setCategoryInName(dto.getCategoryInName());
//            category.setCategoryDisName(dto.getCategoryDisName());
//            category.setCategoryType(dto.getCategoryType());
//            category.setIsHiddenModelNumber(dto.getIsHiddenModelNumber());
//            category.setCategoryCode(dto.getCategoryInName().contains("_") ? dto.getCategoryInName().split("_")[1] : dto.getCategoryInName());
//            if(!StringUtil.isNotEmpty(dto.getAttributeInName()) || StringUtil.isBlank(dto.getAttributeInName())){
//                continue;
//            }
//            AttributeCardDTO attribute = attributeMap.getOrDefault(dto.getAttributeInName(), new AttributeCardDTO());
//            attribute.setAttributeInName(dto.getAttributeInName());
//            attribute.setAttributeDisName(dto.getAttributeDisName());
//            if("1".equals(dto.getDefaultValue())){
//                attribute.setDefaultValue(dto.getEnumValue());
//            }
//            attribute.setIsSplice(dto.getIsSplice());
//            attribute.setAttributeNo(dto.getAttributeNo());
//            if (attribute.getEnumMap() == null) {
//                attribute.setEnumMap(new HashMap<>());
//            }
//            attribute.getEnumMap().put(dto.getEnumId(),dto.getEnumValue());
//            // 将 AttributeEntity 添加到 CategoryEntity 的 attributes 列表中
//            if (category.getAttributeList() == null) {
//                category.setAttributeList(new ArrayList<>());
//            }
//            if (!category.getAttributeList().contains(attribute)) {
//                category.getAttributeList().add(attribute);
//            }
//
//            // 更新 Map
//            map.put(dto.getCategoryInName(), category);
//            attributeMap.put(dto.getAttributeInName(), attribute);
//        }
    	return map;
    }
}
